home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / tcp / SLIPShuttle.lha / SLIPShuttle < prev    next >
Text File  |  1995-04-15  |  6KB  |  184 lines

  1. /* SLIPShuttle.rexx v2.3 By Karl Stenerud (esteneru@direct.ca) */
  2.  
  3. /************************** Basic Configuration *************************/
  4. /*                                    */
  5. baud        = 19200            /* baud rate            */
  6. phonenum    = '000-0000'        /* Server phone number        */
  7. username    = 'your_username%c'    /* Login name            */
  8. password    = 'your_password'    /* Login password        */
  9. /*                                    */
  10. /************************ Advanced Configuration ************************/
  11. /*                                    */
  12. device        = 'serial.device'    /* device to use        */
  13. unit        = 0            /* device unit            */
  14. devbuff        = 4096            /* device buffer size        */
  15. xon        = 0            /* 0=disable, 1=enable XON/XOFF    */
  16. init        = 'ATZ'            /* Modem init command        */
  17. dtr        = 'AT&D0'        /* DTR ignore command        */
  18. hispeed        = 'AT&F2'        /* Highspeed command        */
  19. esc        = '+++'            /* Modem escape sequence    */
  20. hangup        = 'ATH0'        /* Modem hangup command        */
  21. dialcmd        = 'atdt'        /* Modem dial command        */
  22. userprompt    = 'Login: '        /* Host login prompt        */
  23. passprompt    = 'Password: '        /* Host password prompt        */
  24. /*                                    */
  25. /************************* Expert Configuration *************************/
  26. /*                                                                      */
  27. databits    = 8            /* 7 or 8            */
  28. parity        = N            /* None, Even, Odd, Mark, Space    */
  29. stopbits    = 1            /* 1 or 2            */
  30. breaktime    = 250000        /* breaktime in microseconds    */
  31. slipprompt    = 'SL/IP'        /* SLIP init trigger        */
  32. slipstring1    = 'session from ('    /* string up to first IP    */
  33. slipstring2    = ') to '        /* string to second IP        */
  34. gwfirst        = 1            /* 1=gateway comes first    */
  35. S2OPT1        = '7WIRE'        /* leave empty to disable    */
  36. S2OPT2        = 'EOFMODE'        /* Disable if using A2232    */
  37. MTU        = 1006            /* Maximum Transfer Unit (sana2)*/
  38. /************************************************************************/
  39.  
  40.  
  41. /******************* Don't touch anything else below! *******************/
  42.  
  43. if ~show('L',"rexxsupport.library") then
  44. if ~addlib('rexxsupport.library', 0, -30, 0) then exit 10
  45. if ~show('L', "rexxserdev.library") then
  46. if ~addlib( 'rexxserdev.library', 0, -30, 0) then exit 10
  47. signal on break_c
  48.  
  49. CR = '0d'x
  50. bigtest=0
  51.  
  52. if (show('p',AMITCP) == 1) then do
  53.   say 'AmiTCP is active! shutdown? [y/N]'
  54.   pull temp
  55.   if (temp == 'Y') then do
  56.     say 'Shutting down AmiTCP...'
  57.     address command 'execute AmiTCP:bin/stopnet'
  58.     delay(100)
  59.     say 'Hanging up modem...'
  60.     dev = SerOpen(device, unit)
  61.     SerWrite(dev, esc, length(esc))
  62.     Delay(100)
  63.     SerWrite(dev, hangup||CR, length(hangup||CR))
  64.     Delay(100)
  65.     SerWrite(dev, init||CR, length(init||CR))
  66.     SerClose(dev)
  67.     exit 0
  68.   end
  69.   else do;say 'Aborted (TCP was not shut down)';exit 5;end
  70. end
  71.  
  72. dev = SerOpen(device, unit)
  73. bigtest=1
  74. temp = serquery(dev)
  75. parse var temp . . temp1 .
  76. if ((temp1 ~= 36) & (temp1 ~= 4)) then do
  77.   say 'Error accessing modem! ('||temp1')'
  78.   SerClose(dev)
  79.   exit 10
  80. end
  81.  
  82. buffer = AllocMem(devbuff)
  83. bigtest=2
  84. addr = c2d(buffer)
  85. SerSetParms(dev, baud, databits, parity, stopbits, xon, breaktime, devbuff)
  86.  
  87. SerWrite(dev, 'AT'||CR, 3)
  88. delay(30)
  89. status = SerQuery(dev)
  90. parse var status junk1 bytes_read junk2 .
  91. rstring = SerRead(dev, addr, bytes_read)
  92. if pos('OK',rstring) == 0 then do
  93.   say 'You appear to still be connected with the remote server.'
  94.   say 'Attempt to resume AmiTCP? [y/N]'
  95.   pull temp
  96.   if (temp == 'Y') then do
  97.     SerClose(dev)
  98.     delay(30)
  99.     address command 'execute env:.last_ip'
  100.     exit 0
  101.   end
  102.   else do;say 'Aborting...';SerClose(dev);exit 5;end
  103. end
  104.  
  105. SerClear(dev)
  106. say 'Initializing modem...'
  107. SerWrite(dev, init||CR, length(init||CR))
  108. Delay(100)
  109. SerWrite(dev, dtr||CR, length(dtr||CR))
  110. Delay(10)
  111. if baud > 19200 then do;SerWrite(dev, hispeed||CR, length(hispeed||CR));Delay(10);end
  112. say 'Dialing ' phonenum '...'
  113.  
  114. OH = 0
  115. do forever
  116.   delay(100)
  117.   if (OH == 0) then OH = SerWrite(dev, dialcmd||phonenum||CR, length(dialcmd||phonenum||CR))
  118.   status = SerQuery(dev)
  119.   parse var status junk1 bytes_read junk2 .
  120.   rstring = SerRead(dev, addr, bytes_read)
  121.   if (pos('CONNECT' , rstring) ~= 0) then leave
  122.   if (pos('BUSY' , rstring) ~= 0) then do;OH=0; say 'BUSY'; end
  123.   if (pos('VOICE' , rstring) ~= 0) then do;OH=0; say 'VOICE'; end
  124.   if (pos('NO CARRIER', rstring) ~= 0) then do;OH=0; say 'NO CARRIER'; end
  125.   if (pos('ERROR' , rstring) ~= 0) then do;OH=0; say 'ERROR'; end
  126. end
  127.  
  128. call serwait(userprompt)
  129. SerWrite(dev, username||CR, length(username||CR))
  130. /* say userprompt||username */
  131. call serwait(passprompt)
  132. SerWrite(dev, password||CR, length(password||CR))
  133. /* say passprompt */
  134. call serwait(slipprompt)
  135.  
  136. if (gwfirst == 1) then parse var rstring . (slipstring1) gw (slipstring2) ip .
  137. else parse var rstring . (slipstring1) ip (slipstring2) gw .
  138.  
  139. say 'Their Gateway address: '||gw
  140. say 'Your IP address:       '||ip
  141.  
  142. open(file,'env:.last_ip','W')
  143. writeln(file,'execute amitcp:bin/startnet IP '||ip||' GW '||gw||' S2OPT "'||device||' '||unit||' '||baud||' 0.0.0.0 MTU='||MTU||' '||S2OPT1||' '||S2OPT2||'"')
  144. close(file)
  145. address command 'copy env:.last_ip envarc:'
  146.  
  147. SerClose(dev)
  148. delay(50)
  149. address command 'execute env:.last_ip'
  150. FreeMem(buffer,devbuff)
  151. exit 0
  152.  
  153.  
  154. serwait:
  155.   string = arg(1)
  156.   test = 0
  157.   do until (test ~= 0)
  158.     status = SerQuery(dev)
  159.     parse var status junk1 bytes_read junk2 .
  160.     rstring = SerRead(dev, addr, bytes_read)
  161.     if (rstring ~= '') then say rstring
  162.     test = pos(string,rstring)
  163.     Delay(50)
  164.   end
  165. return 0
  166.  
  167.  
  168. break_c:
  169.   say '^C Break.'
  170.   if bigtest > 0 then do
  171.     say 'Hanging up modem...'
  172.     SerWrite(dev, esc, length(esc))
  173.     Delay(100)
  174.     SerWrite(dev, hangup||CR, length(hangup||CR))
  175.     Delay(100)
  176.     SerWrite(dev, init||CR, length(init||CR))
  177.     SerClose(dev)
  178.   end
  179.   if bigtest > 1 then do
  180.     say 'freeing buffer...'
  181.     FreeMem(buffer,devbuff)
  182.   end
  183. exit 5
  184.